package com.yupi.springbootinit.statemachine.service;

import com.yupi.springbootinit.statemachine.core.StateContext;
import com.yupi.springbootinit.statemachine.core.StateTransitionRecord;
import com.yupi.springbootinit.statemachine.core.TransitionResult;

/**
 * 状态机服务接口
 */
public interface StateMachineService {
    
    /**
     * 执行状态转换
     * @param context 状态上下文
     * @return 转换结果
     */
    TransitionResult executeTransition(StateContext context);
    
    /**
     * 检查状态转换是否合法
     * @param stateType 状态类型
     * @param fromState 源状态
     * @param toState 目标状态
     * @return 是否合法
     */
    boolean canTransition(String stateType, String fromState, String toState);
    
    /**
     * 获取指定状态的可转换状态列表
     * @param stateType 状态类型
     * @param currentState 当前状态
     * @return 可转换状态列表
     */
    java.util.List<String> getAvailableTransitions(String stateType, String currentState);
    
    /**
     * 保存状态转换记录
     * @param record 转换记录
     */
    void saveTransitionRecord(StateTransitionRecord record);
    
    /**
     * 查询实体的状态转换历史
     * @param entityType 实体类型
     * @param entityId 实体ID
     * @return 转换历史列表
     */
    java.util.List<StateTransitionRecord> getTransitionHistory(String entityType, Long entityId);
}